package com.xxx.ware.ware_manage_sys.service.impl;

import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxx.ware.ware_manage_sys.bean.dto.OptQueryDto;
import com.xxx.ware.ware_manage_sys.bean.dto.OptRecordDto;
import com.xxx.ware.ware_manage_sys.bean.dto.WebResultDto;
import com.xxx.ware.ware_manage_sys.bean.entity.records.WmsOptRecord;
import com.xxx.ware.ware_manage_sys.bean.enums.OptModuleEnum;
import com.xxx.ware.ware_manage_sys.bean.vo.OptRecordVo;
import com.xxx.ware.ware_manage_sys.mapper.WmsOptRecordMapper;
import com.xxx.ware.ware_manage_sys.service.IOptRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
@Slf4j
public class OptRecordServiceImpl extends ServiceImpl<WmsOptRecordMapper, WmsOptRecord> implements IOptRecordService {
    @Override
    public WebResultDto<OptRecordVo> getOptRecordList(OptQueryDto optQueryDto) {
        Integer pageNo = optQueryDto.getPageNo();
        Integer pageSize = optQueryDto.getPageSize();
        String optId = optQueryDto.getOptId();
        String optModule = optQueryDto.getOptModule();

        LambdaQueryWrapper<WmsOptRecord> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(WmsOptRecord::getOptId, optId);
        queryWrapper.eq(WmsOptRecord::getOptModule, optModule);

        IPage<WmsOptRecord> page = new Page<>(pageNo, pageSize);
        IPage<WmsOptRecord> resultPage = this.getBaseMapper().selectPage(page, queryWrapper);
        if (resultPage == null || resultPage.getRecords() == null || resultPage.getRecords().isEmpty()) {
            return WebResultDto.getDataList(pageNo, pageSize, 0L, null);
        }

        List<OptRecordVo> resultList = resultPage.getRecords().stream().map(e -> {
            OptRecordVo optRecordVo = new OptRecordVo();
            BeanUtils.copyProperties(e, optRecordVo);
            optRecordVo.setOptModule(OptModuleEnum.getTextByKey(e.getOptModule()));
            optRecordVo.setOptTime(DateUtil.format(e.getOptTime(), "yyyy-MM-dd HH:mm:ss"));
            return optRecordVo;
        }).collect(Collectors.toList());

        return WebResultDto.getDataList(pageNo, pageSize, resultPage.getTotal(), resultList);
    }

    @Override
    public Boolean addOptRecord(OptRecordDto optRecordDto){
        WmsOptRecord wmsOptRecord = new WmsOptRecord();
        BeanUtils.copyProperties(optRecordDto, wmsOptRecord);
        return save(wmsOptRecord);
    }
}
